package org.brisling.repository.inf;

import java.io.Serializable;
import java.util.List;

import org.brisling.domain.sysman.inf.BizBeanDataModeler;
import org.brisling.domain.sysman.inf.ManageBeanDataModeler;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.NoRepositoryBean;

/**
 * 
 * 多对多关联对象实体中间表对象实体类仓库接口
 * @author : jackson wang
 * @Date   : 2015年6月8日 下午7:57:06
 * @version: 1.0
 * @param <T> 业务数据仓库泛型接口定义
 * @param <E> 业务数据仓库主导对象泛型接口定义
 * @param <F> 业务数据仓库关联对象泛型接口定义
 * @param <ID>业务数据仓库编码
 */
@NoRepositoryBean
public interface ManageRepository<T extends ManageBeanDataModeler<E,F>,E extends BizBeanDataModeler,F extends BizBeanDataModeler,ID extends Serializable> 
extends CrudRepository<T,ID> {

	/**
	 * 根据主导对象编码查找实体集合
	 * @param id 主导对象唯一编码
	 * @param _page 分页参数
	 * @return	List 类定义中泛型对象实体集合
	 */
	List<T> findByBiztid(Long id ,Pageable _page);
	
	/**
	 * 根据主导对象编码查找实体集合
	 * @param id 主导对象唯一编码
	 * @param _sort 排序参数
	 * @return List 类定义中泛型对象实体集合
	 */
	List<T> findByBiztid(Long id ,Sort _sort);
	
	
	/**
	 * 统计指定编码主导对象的实体数量
	 * @param id 主导对象唯一编码
	 * @return	Long 类定义中泛型对象实体数量
	 */
	Long countByBiztid(Long id);
	
	/**
	 * 根据主导对象查找类定义中实体对象集合
	 * @param e 对象关联中主导对象实体
	 * @param _page 分页参数
	 * @return List 类定义中泛型对象实体集合
	 */
	List<T> findByBizt(E e,Pageable _page);
	
	/**
	 * 
	 * 根据主导对象查找类定义中实体对象集合
	 * @param e 对象关联中主导对象实体
	 * @param _sort 排序参数
	 * @return List 类定义中泛型对象实体集合
	 */
	List<T> findByBizt(E e,Sort _sort);
	
	
	/**
	 * 
	 * 统计指定主导对象的实体数量
	 * @param e 主导对象实体
	 * @return	Long 类定义中泛型对象实体数量
	 */
	Long countByBizt(E e);
	
	/**
	 * 
	* 根据关联对象编码查找实体集合
	 * @param id 关联对象唯一编码
	 * @param _page 分页参数
	 * @return	List 类定义中泛型对象实体集合
	 */
	List<T> findByBizeid(Long id ,Pageable _page);
	
	/**
	 * 根据关联对象编码查找实体集合
	 * @param id 关联对象唯一编码
	 * @param _sort 排序参数
	 * @return	List 类定义中泛型对象实体集合
	 */
	List<T> findByBizeid(Long id ,Sort _sort);
	
	/**	
	 * 统计指定编码关联对象的实体数量
	 * @param id 关联对象唯一编码
	 * @return	Long 类定义中泛型对象实体数量	
	 */
	Long countByBizeid(Long id);
	
	/**
	 * 根据关联对象实体查找实体集合
	 * @param f 对象关联中被动对象实体
	 * @param _page 分页参数
	 * @return List 类定义中泛型对象实体集合
	 */
	List<T> findByBize(F f,Pageable _page);
	
	/**
	 * 根据关联对象实体查找实体集合
	 * @param f 对象关联中被动对象实体
	 * @param _sort 排序对象
	 * @return List 类定义中泛型对象实体集合
	 */
	List<T> findByBize(F f,Sort _sort);
	
	/**
	 *  
	 * 统计指定关联对象的实体数量
	 * @param f 关联对象实体
	 * @return	Long 类定义中泛型对象实体数量
	 */
	Long countByBize(F f);
	
	/**
	 * 删除指定编码集合的实体对象
	 * @param id 类定义中泛型对象的主键集合
	 */
	void deleteById(List<Long> id);
	
	//@Query("delete from #{#entityName}  where biztid = ?1")
	/**
	 * 删除特定编码主导对象的实体
	 * @param _biztid 类定义中泛型对象的主键
	 */
	void deleteByBiztid(Long _biztid);
	
	/**
	 * 删除指定主导对象集合的实体
	 * @param biztids	主导对象唯一编码集合
	 */
	
	void deleteByBiztid(List<Long> biztids);
	
	
	/**
	 * 删除特定编码关联对象的实体
	 * @param bizeid 类定义中泛型对象的主键
	 */
	void deleteByBizeid(Long bizeid);
	
	
	/**
	 * 删除指定关联对象集合的实体集合
	 * @param bizeids	关联对象的实体唯一编码集合
	 */
	void deleteByBizeid(List<Long> bizeids);
	
	
}
